1878D - Reverse Madness - CodeForces Solution


greedy

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;


// templates ---- 

// 1. sieve          ---- sieve of eratosthenes
// 2. binpow         ---- binary exponentiation
// 3. segmentTreeMin ---- minimum segment tree 


const int MOD = (int)1e9 + 7;

void take_input() {
	#ifndef ONLINE_JUDGE
	   freopen("input.txt", "r", stdin);
	   freopen("output.txt", "w", stdout);
	#endif
}

void solve() {
	int n,k; cin >> n >> k;
	string s; cin >> s;
	std::vector<int> l(k),r(k);
	for(int i = 0; i < k; i++)
		cin >> l[i];
	for(int i = 0; i < k; i++)
		cin >> r[i];

	int q; cin >> q;
	map<int, vector<int>> mp;
	for(int i = 0; i < q; i++) {
		int x; cin >> x;

		// now finding l and r 

		int ind = lower_bound(l.begin(),l.end(),x) - l.begin();

		if(ind >= k || l[ind] > x) ind -= 1;

		if(mp.count(ind) == 0) mp[ind] = vector<int>(r[ind]-l[ind]+2,0);

		int a = min(x, l[ind] + r[ind] - x);
		int b = max(x, l[ind] + r[ind] - x);

		mp[ind][a - l[ind]] += 1;
		mp[ind][b - l[ind] + 1] -= 1;
	}



	for(auto item: mp) {
		int ind = item.first;
		int size = item.second.size()-1;

		for(int i = 1; i < size; i++)
			item.second[i] += item.second[i-1];

		int i = 0, j = size - 1;
		int a = l[ind]-1, b = r[ind]-1;

		while(i < j) {
			if(item.second[i] % 2)
				swap(s[a],s[b]);
			a++,b--,i++,j--;
		}
	}

	cout << s << endl;
	
}


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	take_input();
	int t; cin >> t;
	while(t--) {
		
		solve();
	}

	
	return 0;
}


Comments

Submit
0 Comments
More Questions

780C - Andryusha and Colored Balloons
1153A - Serval and Bus
1487C - Minimum Ties
1136A - Nastya Is Reading a Book
1353B - Two Arrays And Swaps
1490E - Accidental Victory
1335A - Candies and Two Sisters
96B - Lucky Numbers (easy)
1151B - Dima and a Bad XOR
1435B - A New Technique
1633A - Div 7
268A - Games
1062B - Math
1294C - Product of Three Numbers
749A - Bachgold Problem
1486B - Eastern Exhibition
1363A - Odd Selection
131B - Opposites Attract
490C - Hacking Cypher
158B - Taxi
41C - Email address
1373D - Maximum Sum on Even Positions
1574C - Slay the Dragon
621A - Wet Shark and Odd and Even
1395A - Boboniu Likes to Color Balls
1637C - Andrew and Stones
1334B - Middle Class
260C - Balls and Boxes
1554A - Cherry
11B - Jumping Jack